/*
 * Material.java
 *
 * Created on 2 Ноябрь 2008 г., 16:06
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package trim.common;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Дмитрий
 */
public class Material
{
  private int length;
  private int knifeCount = 100;
  private int maxEdge = 0xffffff ;//величина максимальной кромки
  private int minEdge = 0;//величина минимальной кромки
  private int knifeInterval;//минимальное расстояние между ножами/мин. попутчик
  private List<RejectedZone> rejectedZones;

  /** Creates a new instance of Material */
  
  public Material(int length)
  {
    this.length = length;
  }
  public Material(int length,int knifeCount,int knifeInterval,int minEdge,int maxEdge)
  {
    this.length = length;
    this.knifeCount=knifeCount;
    this.knifeInterval=knifeInterval;
    this.maxEdge=maxEdge;
    this.minEdge=minEdge;
  }

  public Material(Material m)
  {
    length=m.length;
    knifeCount=m.knifeCount;
    maxEdge=m.maxEdge;
    minEdge=m.minEdge;
    knifeInterval=m.knifeInterval;
    rejectedZones=new ArrayList(m.getRejectedZones().size());
    for(RejectedZone rz:m.getRejectedZones())
      rejectedZones.add(new RejectedZone(rz));
  }

  public int getLength()
  {
    return length;
  }

  /**
   * Количество ножей
   * @return
   */
  public int getKnifeCount()
  {
    return knifeCount;
  }

  /**
   * минимальное расстояние между ножами/мин. попутчик
   * @return минимальное расстояние между ножами/мин. попутчик
   */
  public int getKnifeInterval()
  {
    return knifeInterval;
  }

  /**
   * величина максимальной кромки
   * @return величина максимальной кромки
   */
  public int getMaxEdge()
  {
    return maxEdge;
  }

  /**
   * величина минимальной кромки
   * @return величина минимальной кромки
   */
  public int getMinEdge()
  {
    return minEdge;
  }


  @Override
  public int hashCode()
  {
    //return super.hashCode();
    int hash=7;
    hash^=length;
    hash^=knifeCount<<2;
    hash^=maxEdge<<4;
    hash^=minEdge<<6;
    hash^=knifeInterval<<8;
    return hash;

  }

  @Override
  public boolean equals(Object obj)
  {
    if(obj==null)
      return false;
    if(getClass()!=obj.getClass())
      return false;
    final Material other=(Material)obj;
    if(this.length!=other.length)
      return false;
    if(this.knifeCount!=other.knifeCount)
      return false;
    if(this.maxEdge!=other.maxEdge)
      return false;
    if(this.minEdge!=other.minEdge)
      return false;
    if(this.knifeInterval!=other.knifeInterval)
      return false;
    return true;
  }
 public List<RejectedZone> getRejectedZones()
 {
   if(rejectedZones==null)
     rejectedZones=new ArrayList();
   return rejectedZones;
 }
}
